package com.yyh.stu;

import java.util.*;

/*【Map和List集合】
使用一种Map集合存储多个班级学生信息。键为班级编号，值为对应班级的多名学生。学生基本信息有学号，姓名，年龄，成绩。编程实现如下功能：
1、创建3个List容器，用于存放各班的学生信息；
创建一种Map容器(保证班级编号自然排序)，用于存放所有班级编号及其学生信息的容器
初始化数据：向以上各个容器添加测试数据。每个班至少2名学生。
2、按班级编号，分班显示输出各班的学生信息。
3、输出总成绩最高的班级编号。*/
public class Test4 {
    public static void main(String[] args) {
        //创建3个List容器，用于存放各班的学生信息
        List<Student> list1 = new ArrayList<>();
        List<Student> list2 = new ArrayList<>();
        List<Student> list3 = new ArrayList<>();
        //初始化数据：向以上各个容器添加测试数据，每个班至少2名学生。
        list1.add(new Student(1, "张三", 18, 90));
        list1.add(new Student(2, "李四", 19, 80));
        list1.add(new Student(3, "王五", 17, 70));
        list2.add(new Student(4, "丽丽", 18, 90));
        list2.add(new Student(5, "曹操", 17, 80));
        list2.add(new Student(6, "七七", 17, 90));
        list3.add(new Student(7, "零零", 18, 90));
        list3.add(new Student(8, "九九", 17, 80));
        list3.add(new Student(9, "三三", 17, 90));
        //创建Map容器，用于存放所有班级编号及其学生信息
        Map<Integer, List<Student>> map = new TreeMap<>();
        //将各班学生信息添加到Map容器中
        map.put(1, list1);
        map.put(2, list2);
        map.put(3, list3);
        //按班级编号，分班显示输出各班的学生信息
        for (Map.Entry<Integer, List<Student>> entry : map.entrySet()) {
            System.out.println("班级编号：" + entry.getKey());
            System.out.println("班级学生信息：" + entry.getValue());
        }
        //输出总成绩最高的班级编号
        int maxScore = 0;
        for (Map.Entry<Integer, List<Student>> entry : map.entrySet()) {
            int sum = 0;
            for (Student student : entry.getValue()) {
                sum += student.getScore();
            }
            if (sum > maxScore) {
                maxScore = sum;
            }
        }
        System.out.println("总成绩最高的班级编号：" + maxScore);
    }
}
//创建Student类
class Student{
    //属性
    //学号
    private int id;
    //姓名
    private String name;
    //年龄
    private int age;
    //成绩
    private int score;
    //无参构造方法
    public Student() {
    }
    //有参构造方法
    public Student(int id, String name, int age, int score) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.score = score;
    }
    //getter和setter方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
    //重写equals和hashCode方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id == student.id && age == student.age && score == student.score && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, age, score);
    }
    //toString方法
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
}
